package com.shalanzi.hospital.service;

import com.shalanzi.hospital.pojo.User;
import com.shalanzi.hospital.query.UserQuery;
import com.shalanzi.hospital.vo.UserModel;
import com.shalanzi.hospital.vo.Welcome;

import java.util.List;
import java.util.Map;

/**
 * @author Dream_飞翔
 * @date 2021/9/24
 * @time 21:13
 * @email 1072876976@qq.com
 */
public interface UserService {

    /**
     * 获取用户列表
     *
     * @param userQuery 用户提交的参数
     * @return 用户列表集合
     */
    Map<String, Object> getUserList(UserQuery userQuery);

    /**
     * 用户登录方法
     *
     * @param userName 用户名称
     * @param password 用户密码
     * @return 用户模块对象
     */
    UserModel userLogin(String userName, String password);

    /**
     * 通过用户Id查询用户对象
     *
     * @param userId 用户Id
     * @return 用户对象
     */
    User selectUserById(Integer userId);

    /**
     * 通过用户Id来更新用户对象
     *
     * @param user 前端传来的用户对象
     * @return 受到影响的行数
     */
    Integer updateUserById(User user);

    /**
     * 新增用户对象
     *
     * @param user 用户提交的用户对象
     * @return 受影响的行数
     */
    Integer addUserById(User user);

    /**
     * 批量删除用户对象
     *
     * @param ids 用户选择要删除的数组
     * @return 受到影响的行数
     */
    Integer deleteUserByIds(Integer[] ids);

    /**
     * 获取所有的分组
     *
     * @return 所有符合条件的分组集合
     */
    List<Map<String, Object>> queryAllGroups();

    /**
     * 查询排班的护士
     *
     * @param userId 用户传来的Id
     * @return 符合条件的护士对象
     */
    User selectClassUserById(Integer userId);

    /**
     * 更新排班状态
     *
     * @param user 用户提交的排班状态码
     * @return 受到影响的行数
     */
    Integer updateUserState(User user);

    /**
     * 查询所有的排班状态
     *
     * @return 符合排班状态的分组集合
     */
    List<Map<String, Object>> queryAllStates();

    /**
     * 获取到医院总的数据信息
     *
     * @return 医院总数据信息
     */
    Welcome showHospitalData();

    /**
     * 修改用户密码
     *
     * @param userId 当前用户的Id
     * @param newPassword 用户输入的新密码
     * @param rePassword 用户重复输入的密码
     * @return 受到影响的行数
     */
    Integer updatePassword(Integer userId, String newPassword, String rePassword);
}
